#pragma once

#include "FileDetails.h"
#include <string>

namespace GPUCC
{
	class File
	{
	public:
		File(const std::string& Path);
		virtual ~File();

		virtual bool Open(bool ReadOnly = false) = 0;
		virtual void Close() = 0;
		virtual unsigned int GetSize();
		virtual bool IsOpen() = 0;

		std::string GetPath();
		void SetPath(const std::string& Path);
		FileDetails GetDetails();

	protected:
		virtual unsigned int GetSizeInternal() = 0;

		std::string m_Path;
	};
}